package com.fastloan.mgt.model.service;

import com.fastloan.mgt.model.model.ApplicationModel;
import com.fastloan.mgt.model.model.Model;
import com.kawins.base.BaseService;
import org.apache.poi.ss.formula.functions.T;

import java.util.List;
import java.util.Optional;

/**
 * 模型计算Service
 *
 * @author yanwe
 *         createTime 2017-02-2017/2/14 13:42
 */
public interface ModelCalculateService extends BaseService<ApplicationModel>{

    /**
     * 流程调用计算模型
     *
     * @param processId 流程Id
     */
    void calculateInProcess(String processId);

    /**
     * 计算模型
     *
     * @param applicationId
     */
    void calculate(String applicationId);

    /**
     * 查询进件是否有指定模型
     *
     * @param applicationId 进件ID
     * @param modelStrategyClass 模型类
     * @param <T> 模型
     * @return true/false
     */
    <T extends GeneratorModelStrategy> boolean isHaveModel(String applicationId, Class<T> modelStrategyClass);

    /**
     * 获得所有模型
     *
     * @return 模型
     */
    List<Model> getAllModel();

    /**
     * 获得模型计算结果
     *
     * @param applicationId 进件id
     * @return 模型计算结果
     */
    List<ApplicationModel> getModelResult(String applicationId);

    /**
     * 获得该进件最后一个模型结果
     *
     * @param applicationId 进件id
     * @return 模型结果
     */
    ApplicationModel getLastModelResult(String applicationId);

    /**
     * 模型结果回调
     *
     * @param applicationModel 模型结果
     */
    void saveModelResult(ApplicationModel applicationModel);

    /**
     * 根据模型id选择模型
     *
     * @param modelId 模型id
     * @return 模型
     */
    Optional<Model> choiceModel(int modelId);
}
